/**
 * 
 */
package com.bbva.gptf.back.servicio.bench;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;

import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;

import com.bbva.gptf.back.dominio.Tgpt008PortaBench;
import com.bbva.gptf.dto.bean.Bench;
import com.bbva.gptf.dto.bean.ClasificacionDelta;
import com.bbva.gptf.dto.servicio.bench.ServicioBench;
import com.bbva.gptf.dto.servicio.posicion.ServicioClasifDelta;
import com.bbva.jee.arq.spring.core.httpService.HttpService;

/**
 * @author mtellezg
 * 
 */
@HttpService(serviceName = "servicioBenchMarkHttp")
public class ServicioBenchImpl implements ServicioBench {

	@Autowired
	private ServicioClasifDelta servicioClasifDelta;

	@Override
	public Bench actualizaBenchMarck(Bench bench) {
		if (bench != null && StringUtils.isNotBlank(bench.getNbPortafolio())) {
			// Se obtiene las clasificaciones anteriores y se quita la relacion
			final Bench benchOld = obtenerBenchMarckPorNombre(bench
					.getNbPortafolio());
			if (benchOld != null) {
				for (final ClasificacionDelta clasificacionDelta : benchOld
						.getListaClasificacionDeltas()) {
					clasificacionDelta.setNbPortalfolio(null);
				}
				servicioClasifDelta.actualizaClasificacionesDelta(benchOld
						.getListaClasificacionDeltas());
			}

			final List<BigDecimal> listaClasif = new ArrayList<BigDecimal>();

			for (final ClasificacionDelta clasif : bench
					.getListaClasificacionDeltas()) {
				listaClasif.add(clasif.getCdClasifDelta());
			}
			servicioClasifDelta.actualizarNbPortafolio(listaClasif,
					bench.getNbPortafolio());

			bench = obtenerBenchMarckPorNombre(bench.getNbPortafolio());
		}
		return bench;
	}

	@Override
	public List<Bench> obtenerBench() {

		try {
			return Tgpt008PortaBench.obtenerBench();
		} catch (final Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}
		return new ArrayList<Bench>();
	}

	@Override
	public Bench obtenerBenchMarckPorNombre(final String nbPortafolio) {
		Bench bench = new Bench();
		try {

			bench = Tgpt008PortaBench.obtenerBenchmarckPorNombre(nbPortafolio);
			bench.setListaClasificacionDeltas(servicioClasifDelta
					.obtieneClasificacionPorNbPortafolio(bench
							.getNbPortafolio()));
		} catch (final Exception e) {
			e.printStackTrace();
		}
		return bench;
	}

	@Override
	public List<Bench> obtenerBenchmarckPorNombreLike(final String nbPortafolio) {
		List<Bench> listaBenchs = new ArrayList<Bench>();
		try {
			listaBenchs = Tgpt008PortaBench.obtenerBenchMarckPorNombreLike("%"
					+ nbPortafolio + "%");
			for (final Bench bench : listaBenchs) {
				bench.setListaClasificacionDeltas(servicioClasifDelta
						.obtieneClasificacionPorNbPortafolio(bench
								.getNbPortafolio()));
			}
		} catch (final Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}
		return listaBenchs;
	}

	/**
	 * @param servicioClasifDelta
	 *            the servicioClasifDelta to set
	 */
	public void setServicioClasifDelta(
			final ServicioClasifDelta servicioClasifDelta) {
		this.servicioClasifDelta = servicioClasifDelta;
	}
}
